package Longing;

import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
        /*
        账号：ksd
        密码:ksd' or '1'='1
        登录成功
        这种现象称为SQL注入（黑客经常使用）
         */
public class demo1 {
    /*
    实现用户登录
     */
    public static void main(String[] args) throws SQLException {
        // 初始化界面
        Map<String,String> userlogInfo = initUI();
        // 验证用户和密码
        boolean loginSuccess = longIn(userlogInfo);
       // 最后输出结果
        System.out.println(loginSuccess ? "登录成功" : "登录失败");

    }

   /**
    * @Author 枫城
    * @Date 2022/4/4 
    * @Param [userlogInfo] 用户登录信息
    * @return boolean flase表示失败 true表示成功
    **/
    private static boolean longIn(Map<String, String> userlogInfo) throws SQLException {
        // JDBC代码

        // 打标记
        boolean LoginSuccess = false;

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        String url = "jdbc:mysql://192.168.10.132:3306/learn_JDBC?useUnicode=true&characterEncoding=utf-8";
        String user = "root";
        String password = "123456";
        try {
            Class.forName("com.mysql.jdbc.Driver");

            connection = DriverManager.getConnection(url,user,password);

            statement = connection.createStatement();

            String sql = " select * from user where user_id = '"+ userlogInfo.get("loginId")+
                    "'and pwd = '"+ userlogInfo.get("pwd")+"' ";
            // SQL注入的关键处（漏洞）
            // 以上代码完成了SQL语句的拼接，下一行的代码发送了SQL语句给DBMS，DBMS进行了SQL语句的编译
            // 用户输入包括关键词 将非法信息进行了编译。原SQL语句被扭曲
            resultSet = statement.executeQuery(sql); // 专门执行DQL(查询语句)
            // 答应登录的用户信息
//            while (resultSet.next()){
//                LoginSuccess = true;
//                String a = resultSet.getString("user_id");  // 注意sql语句的as，根据sql语句语句来转换
//                String b = resultSet.getString("user_name");
//                String c = resultSet.getString("pwd");
//                String d = resultSet.getString("user_rename");
//                System.out.println(a + " | " + b + " | " + c + " | " + d);
//            }
            if (resultSet.next()){
                LoginSuccess = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (resultSet != null){
                try{
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (statement != null){
                try{
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null){
                try{
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return LoginSuccess;
    }


/**
 * @Author 枫城
 * @Date 2022/4/4 
 * @Param [用户输入的信息，用户名还有密码]
 * @return java.util.Map<java.lang.String,java.lang.String>
 **/
    private static Map<String, String> initUI() {
        Scanner s = new Scanner(System.in);

        System.out.print("账号：");
        String loginame = s.nextLine();

        System.out.print("密码:");
        String pwd = s.nextLine();

        Map<String, String> userlogInfo = new HashMap<>();
        userlogInfo.put("loginId", loginame);
        userlogInfo.put("pwd", pwd);
        return userlogInfo;
    }



}
